

// #include "meter.h"


#ifndef __METER_H__
#define __METER_H__

#include "stdint.h"


#ifdef __cplusplus
extern "C"
{
#endif

	

//	DEV_TYPE_ELE_METER     = 0x2001,   //  单相电表
//	DEV_TYPE_ELE_METER_3PH = 0x2003,   // 3相电表

#define     PID_RS485_METER_STR_1PH      "2001"
#define     PID_RS485_METER_STR_3PH      "2003"

#define     RS485_METER_DEVC_NAME       "dev050"
#define     RS485_METER_BROADCAST_MAC_STR     "FFFFFFFFFFFF"




typedef struct   {

/* ----------------------------------------	
uint8_t THD_Volt_A;        //A相电压总谐波含量----0.01
uint8_t THD_Volt_B;        //B相电压总谐波含量
uint8_t THD_Volt_C;        //C相电压总谐波含量

uint8_t THD_Curr_A;        //A相电流总谐波含量
uint8_t THD_Curr_B;        //B相电流总谐波含量-0.01
uint8_t THD_Curr_C;        //C相电流总谐波含量
	
	
uint8_t  WaveformDistortion_Volt_A;	   //A相电压波形失真度	 --0.01
uint8_t  WaveformDistortion_Volt_B;	   //B相电压波形失真度	
uint8_t  WaveformDistortion_Volt_C;	   //C相电压波形失真度	
	
uint8_t  WaveformDistortion_Curr_A;	   //A相电流波形失真度--0.01
uint8_t  WaveformDistortion_Curr_B;	   //B相电流波形失真度
uint8_t  WaveformDistortion_Curr_C;	   //C相电流波形失真度
----------------------------------------    */		
	
uint16_t	  T;            //温度---0.1摄氏度 temperature		
uint16_t		Freq	;       //电压频率	0.01Hz
	
uint16_t	  PF_A	  ;     //A相功率因素0.001
uint16_t	  PF_B	  ;     //B相功率因素0.001
uint16_t	  PF_C	  ;     //C相功率因素0.001
uint16_t	  PF_T	  ;     //总功率因素0.001
	
uint16_t	  Urms_A ;      //A相电压---0.1V
uint16_t	  Urms_B ;      //B相电压---0.1V
uint16_t	  Urms_C ;      //C相电压---0.1V
	
uint32_t	  Irms_A;       //A相电流1mA-- 
uint32_t	  Irms_B;       //B相电流1mA-- 
uint32_t	  Irms_C;       //C相电流1mA-- 
	
uint32_t		Power_A	;     //A相有功功率--单位--(1W)	
uint32_t		Power_B	;     //B相有功功率--单位--(0.001kW)	
uint32_t		Power_C	;     //C相有功功率--单位--(0.001kW)	
uint32_t		Power_T	;     //总有功功率---单位--(0.001kW)		ls
	

uint32_t		Qa	;           //A相无功功率	--0.001kvar
uint32_t		Qb	;           //B相无功功率	
uint32_t		Qc	;           //C相无功功率	
uint32_t		Qt	;           //总无功功率	

uint32_t		S	;           //视在功率


uint32_t	  EnergyP;           //有功电能量--单位--(0.01kWh)	
uint32_t	  EnergyQ;           //无功电能量--单位--(0.01kWh)	
//uint32_t	  EnergyS;           //视在电能量--单位--(0.01kWh)		


//uint32_t		Pfor2	;//	正向有功电能二次侧	79   KWH
//uint32_t		Pinv2	;//	反向有功电能二次侧	81
//uint32_t		Qfor2	;//	正向无功电能二次侧	83
//uint32_t		Qinv2	;//	反向无功电能二次侧	85
//uint32_t		Pfor1	;//	正向有功电能一次侧	87
//uint32_t		Pinv1	;//	反向有功电能一次侧	89
//uint32_t		Qfor1	;//	正向无功电能一次侧	91
//uint32_t		Qinv1	;//	反向无功电能一次侧	93
	
	
uint32_t		CT	;     //电流互感器变比		--04000306 ---3Bytes
	
uint32_t		VT	;     //电压互感器变比		--04000307 ---3Bytes	
	
	
} MeterData_st;
	






#if 0


typedef struct{
     long A_voltage;   //*0.01V
     long B_voltage;         
     long C_voltage;           
	
     long A_current;   //*1mA          
     long B_current;             
     long C_current;            

     long A_power;      //*0.1W        
     long B_power;            
     long C_power;  
     long T_power;      //总功率    

     long A_power_fa;  //*0.001      
     long B_power_fa;             
     long C_power_fa;   
     long T_power_fa; //总功率因数
	
    unsigned long watt_hour; //0.1kWh
    unsigned int watt_hour_dot;
	
}ELE_METER;



extern  ELE_METER ele_meter;


// ele_meter 被函数 ConcentorSendAlarmtoSever(void) 使用 


#endif




#define MAX_PID_LEN             32
#define MAX_DEV_NAME_LEN        32

typedef		struct         
{

 	char         pid[MAX_PID_LEN]; //    "pid": "xxxxxx",    // 产品类别， 平台预先定好的     	
 	char         deviceName[MAX_PID_LEN];   //接收返回来的是 name
 	uint8_t      privAddr; //privAddr字段在一个节点带多个子设备的情况下用， 如多灯头设备， plc转485等。		系统默认privAddr=1   		
	uint8_t      nodeType;  //节点类型	
	uint8_t      channel;   //系统默认nodeType=0，channel=0

} MeterConfig_st; //

// "data": {
// 	"deviceName": "dev050",
// 	"mac": "FFFFFFFFFFFF",
// 	"nodeType": 1,
// 	"channel": 1,
// 	"privAddr": 50,
// 	"pid": "2003"
// },

   



extern  MeterData_st  MeterData;

extern  MeterConfig_st  meter_config;


void  Meter_Init(void);

void  Meter_Tick(void);

//比较两个电表是否匹配  相等返回>0;不相等返回0，出错返回<0
int8_t Meter_is_pid_eq( MeterConfig_st* ma,MeterConfig_st* mb );


void MeterDataUpdate ( void );



#ifdef __cplusplus
}

#endif

#endif /* __METER_H__ */







